AWS CloudTrailの証跡を個別のリージョンからすべてのリージョンに移行した後の作業まとめ
こんにちは。サービスグループの武田です。
AWSには、AWSアカウントの操作を記録し監査を支援するAWS CloudTrailというサービスがあり、証跡を作成して有効化することで操作を記録できます。作成できる証跡は次の2種類です。
- 作成したリージョンのみを記録する「1つのリージョンに適用される」証跡(以下、個別リージョン証跡)
- すべてのリージョンを記録する「すべてのリージョンに適用される」証跡(以下、全リージョン証跡)
個別リージョン証跡から全リージョン証跡への移行については、過去に虎塚がエントリを書いていますので参考にしてください。
このエントリでは、全リージョン証跡へ移行後(上記エントリの手順4完了)に行う既存ログのコピー、既存ログのバケット削除の方法を紹介します。なお、これらの作業は移行したから必須というものではありません。必要に応じて行ってください。
環境
次の環境で検証しています。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G65 $ aws --version aws-cli/1.16.34 Python/3.7.0 Darwin/17.7.0 botocore/1.12.24 $ jq --version jq-1.5
またAWS CLI用のdefault
プロファイルが設定されています。
既存ログのコピー(または移動)
個別リージョン証跡で記録していたログは、おそらく証跡と同じリージョンに個別にバケットを作成して保存しているかと思われます。全リージョン証跡の場合、ひとつのバケットにすべてのリージョンのログが保存されます。そのため、Amazon Athenaなどでログ分析したいケースなどを想定すると、既存ログを全リージョン証跡のバケットにコピー(または移動)しておくと便利そうです。
既存ログのバケット名をcloudtrail-${region}-${aws_account_id}
、新規ログのバケット名をcloudtrail-all-region-${aws_account_id}
とすると、次のコマンドでコピーできます。
aws_account_id=$(aws sts get-caller-identity | jq -r '.Account') regions=$(aws ec2 describe-regions | jq -r '.Regions[].RegionName') for region in $regions; do aws s3 cp --recursive "s3://cloudtrail-${region}-${aws_account_id}/AWSLogs/${aws_account_id}/CloudTrail/" "s3://cloudtrail-all-region-${aws_account_id}/AWSLogs/${aws_account_id}/CloudTrail/" done
移動の場合はmv
コマンドを使います。また&
を付けて全リージョン並列なんてこともできますね。
aws_account_id=$(aws sts get-caller-identity | jq -r '.Account') regions=$(aws ec2 describe-regions | jq -r '.Regions[].RegionName') for region in $regions; do aws s3 mv --recursive "s3://cloudtrail-${region}-${aws_account_id}/AWSLogs/${aws_account_id}/CloudTrail/" "s3://cloudtrail-all-region-${aws_account_id}/AWSLogs/${aws_account_id}/CloudTrail/" & done
一点注意としては、CloudTrailの移行時に、一時的に証跡の重複期間があります。出力されるファイル名は異なるため、コピーをして上書きされるということはありません。一方でコピー時にその重複ログを排除するのは難しいと考えますので、そこは許容する必要があります。
既存ログのバケット削除
既存ログのコピーができたらそのバケットは不要ですので削除します。一度削除してしまうと復元することはできませんので、必ずコピーできていることを確認してください。前述と同様、既存ログのバケット名をcloudtrail-${region}-${aws_account_id}
とすると、次のコマンドで削除できます。
aws_account_id=$(aws sts get-caller-identity | jq -r '.Account') regions=$(aws ec2 describe-regions | jq -r '.Regions[].RegionName') for region in $regions; do aws s3 rb --force s3://cloudtrail-${region}-${aws_account_id} done
その他
SNSやCloudWatch Logsと連携させていた場合はそれらの設定も必要となります。またDatadogやSplunk、Sumo Logicなどのサードパーティー製品を利用してCloudTrailの証跡ログを監視・分析している場合なども、忘れずに設定を変更してください。
まとめ
全リージョン証跡がリリースされてからしばらく経ちましたが、個別リージョン証跡を利用している方も多いのではないでしょうか。全リージョン証跡の機能がリリースされた当時は、証跡とバケットのリージョンが異なっているとリージョン間転送費がかかっていました。現在はこの転送費がかからないため、費用を懸念して個別リージョン証跡を利用していた方は全リージョン証跡への移行を検討してみてはいかがでしょうか。